﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using USMCdotNET;

namespace USMC.Net
{
    /// <summary>
    /// Interaction logic for synchronizationPage.xaml
    /// </summary>
    public partial class synchronizationPage : baseParametersPage
    {
        public synchronizationPage(Devices devices)
        {
            InitializeComponent();
            _devices = devices;
            invertChB1.IsChecked = _devices.MODE[0].SyncInvert;
            invertChB2.IsChecked = _devices.MODE[1].SyncInvert;
            enableSyncOutTB1.IsChecked = _devices.MODE[0].SyncOUTEn;
            enableSyncOutTB2.IsChecked = _devices.MODE[1].SyncOUTEn;
            stepsPerPulseOutTB1.Text = _devices.MODE[0].SyncCount.ToString();
            stepsPerPulseOutTB2.Text = _devices.MODE[1].SyncCount.ToString();
            OutDuarationTB1.Text = _devices.PRMS[0].SynOUTP.ToString();
            OutDuarationTB2.Text = _devices.PRMS[1].SynOUTP.ToString();
            resetOutCounterChB1.IsChecked = _devices.SyncCountReset1;
            resetOutCounterChB2.IsChecked = _devices.SyncCountReset2;

        }
        public override void ApplyParameters()
        {
            if (invertChB1.IsChecked == true)
                _devices.MODE[0].SyncInvert=true;
            else
                _devices.MODE[0].SyncInvert = false;
            if (invertChB2.IsChecked == true)
                _devices.MODE[1].SyncInvert = true;
            else
                _devices.MODE[1].SyncInvert = false;
            
            if (enableSyncOutTB1.IsChecked == true)
                _devices.MODE[0].SyncOUTEn = true;
            else
                _devices.MODE[0].SyncOUTEn = false;
            if (enableSyncOutTB2.IsChecked == true)
                _devices.MODE[1].SyncOUTEn = true;
            else
                _devices.MODE[1].SyncOUTEn = false;
            try
            {
                int t = int.Parse(OutDuarationTB1.Text);
                if (t > 0 && t < 10000)
                    _devices.PRMS[0].SynOUTP = (byte)t; //TODO: ПРОВЕРИТЬ КОРРЕКТНОСТЬ!!!!!!
                else
                    MessageBox.Show("Неверная продолжительность входного сигнала по X", "Ошибка!");
            }
            catch
            {
                MessageBox.Show("Неверная продолжительность входного сигнала по X", "Ошибка!");
            }
            try
            {
                int t = int.Parse(OutDuarationTB2.Text);
                if (t > 0 && t < 10000)
                    _devices.PRMS[1].SynOUTP = (byte)t;// и тут тоже
                else
                    MessageBox.Show("Неверная продолжительность входного сигнала по X", "Ошибка!");
            }
            catch
            {
                MessageBox.Show("Неверная продолжительность входного сигнала по X", "Ошибка!");
            }
            try
            {
                uint t = uint.Parse(stepsPerPulseOutTB1.Text);
                if (t > 0 && t < 10000)
                    _devices.MODE[0].SyncCount = t;
                else
                    MessageBox.Show("Некорректное значение продолжительности импульса по X", "Ошибка!");
            }
            catch
            {
                MessageBox.Show("Некорректное значение продолжительности импульса по X", "Ошибка!");
            }
            try
            {
                uint t = uint.Parse(stepsPerPulseOutTB2.Text);
                if (t > 0 && t < 10000)
                    _devices.MODE[1].SyncCount = t;
                else
                    MessageBox.Show("Некорректное значение продолжительности импульса по Y", "Ошибка!");
            }
            catch
            {
                MessageBox.Show("Некорректное значение продолжительности импульса по Y", "Ошибка!");
            }
            if (resetOutCounterChB1.IsChecked == true)
                _devices.SyncCountReset1 = true;
            else
                _devices.SyncCountReset1 = false;
            if (resetOutCounterChB2.IsChecked == true)
                _devices.SyncCountReset2 = true;
            else
                _devices.SyncCountReset2 = false;
        }
        private void TextBox_KeyDown(object sender, KeyEventArgs e)
        {
            TextBox t = (TextBox)sender;
            char ch = (char)e.Key;
            if (!Char.IsDigit(ch))
            {
                if (e.Key != Key.Back && e.Key != Key.Delete)
                    e.Handled = true;
                else if (t.Text.Length == 1 || t.SelectedText.Length == t.Text.Length)
                    e.Handled = true;
            }
            else if (t.Text.Length > 5)
            {
                if (t.SelectedText.Length == 0)
                    e.Handled = true;
            }
        }

        private void resetSyncoutCounterButton_Click(object sender, RoutedEventArgs e)
        {
            _devices.MODE[0].SyncOUTR = true;
            _devices.MODE[1].SyncOUTR = true;
        }
    }
}
